package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import util.automatico;
import util.documentUtils;
import util.enviaEmail;
import bean.empresaBean;
import conexao.Conexao;
import dao.empresaDao;

public class cadastrarEmpresa extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public cadastrarEmpresa() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		PrintWriter out = response.getWriter();
		
		empresaBean empresa = new empresaBean();
		
		Connection conn = null;
		try {
			conn = new Conexao().getConexao();
		} catch (SQLException e) {
			new enviaEmail().enviar(e);
			out.print("falhaConexao");
			return;
		}
		
		if(request.getParameter("nomeEmpresa") == ""){
			out.print("Informe o nome da empresa.");
			return;
		}
		if(request.getParameter("cnpj") == ""){
			out.print("Informe o CNPJ.");
			return;
		}
		if(request.getParameter("cidade") == ""){
			out.print("Informe a cidade.");
			return;
		}
		
		String nomeEmpresa = request.getParameter("nomeEmpresa");
		String cnpj = request.getParameter("cnpj");
		String cidade = request.getParameter("cidade");
		
		try {
			if(new documentUtils().isCNPJ(cnpj)){
				empresa.setCnpj(cnpj);
					if(new empresaDao().cnpjCadastrado(conn, empresa)){
						out.print("Este CNPJ já está cadastrado!");
						return;
					}else{
						empresa.setNome(nomeEmpresa);
						empresa.setCidade(cidade);
						new empresaDao().inserir(conn, empresa);
						conn.commit();
						new automatico().cadastrarUsuario(cnpj);
						new automatico().cadastrarCidade(cnpj);
					}
			}else{
				out.print("CNPJ inválido");
				return;
			}
		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (Exception ex) {
				new enviaEmail().enviar(ex);
				ex.printStackTrace();
			}
			new enviaEmail().enviar(e);
			throw new RuntimeException(e);
		} finally {
			try {
				conn.close();
			} catch (Exception ex) {
				new enviaEmail().enviar(ex);
			}
		}

	}

}
